package domain;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

import database.DBGestor;

public class GestorUsuario {

	String imprimeT;

	private DBGestor DBGestor;
	private HashMap<String, Usuario> usuarios;
	private HashMap<String, AlquilerPeliculas> alquileresPeliculas;
	private HashMap<String, AlquilerCDs> alquileresCDs;

	private Map<String, FavoritoPelicula> favoritosPeliculas;

	public GestorUsuario() {
		usuarios = new HashMap<String, Usuario>();
		DBGestor = new DBGestor();
	}

	public void anadirUsuario(String nombre, String apellido, String dni,
			String fechaNacimiento, int telefono, String username,
			String password, double saldo) {

		int id = getMaxID() + 1;
		Usuario usuario = new Usuario(id, nombre, apellido, dni,
				fechaNacimiento, telefono, username, password, saldo);
		DBGestor.anadirUsuario(usuario);

	}

	public void nuevoUsuarioTrasEliminar(Integer key, String nombre,
			String apellido, String dni, String fechaNacimiento, int telefono,
			String username, String password, double saldo) {

		Usuario usuario = new Usuario(key, nombre, apellido, dni,
				fechaNacimiento, telefono, username, password, saldo);
		DBGestor.anadirUsuario(usuario);

	}

	public Map<String, Usuario> consultarUsuarios() {

		return DBGestor.consultarUsuarios();
	}

	public void modificarUsuario(Usuario usuario) {
		DBGestor DBGestor = new DBGestor();
		DBGestor.modificarUsuario(String.valueOf(usuario.getId()), usuario);
		DBGestor = null;

	}

	public void modificarAlquilerPelicula(String key, AlquilerPeliculas alquiler) {
		DBGestor DBGestor = new DBGestor();
		DBGestor.modificarAlquilerPeliculas(key, alquiler);
		DBGestor = null;

	}

	public void modificarAlquilerCDs(String key, AlquilerCDs alquiler) {
		DBGestor DBGestor = new DBGestor();
		DBGestor.modificarAlquilerCDs(key, alquiler);
		DBGestor = null;

	}

	public void modificarFavoritoPelicula(String key, FavoritoPelicula favorito) {
		DBGestor DBGestor = new DBGestor();
		DBGestor.modificarFavoritoPelicula(key, favorito);
		DBGestor = null;

	}

	public void modificarFavoritoCDs(String key, FavoritoCD favorito) {
		DBGestor DBGestor = new DBGestor();
		DBGestor.modificarFavoritoCDs(key, favorito);
		DBGestor = null;

	}

	public int getMaxID() {
		int maxID = -1;
		GestorUsuario gestorUsuario = new GestorUsuario();
		usuarios = (HashMap<String, Usuario>) gestorUsuario.consultarUsuarios();
		if (usuarios != null) {
			ArrayList<Usuario> listaUsuarios = new ArrayList<Usuario>(
					usuarios.values());
			for (int i = 0; i < listaUsuarios.size(); i++) {
				if (listaUsuarios.get(i).getId() > maxID) {
					maxID = listaUsuarios.get(i).getId();
				}
			}
		}
		return maxID;
	}

	public Map<String, AlquilerPeliculas> consultarAlquileresPelicula() {
		DBGestor DBGestor = new DBGestor();
		return DBGestor.consultarAlquileresPeliculas();
	}

	public Map<String, AlquilerCDs> consultarAlquileresCDs() {
		DBGestor DBGestor = new DBGestor();
		return DBGestor.consultarAlquileresCDs();
	}

	public Map<String, FavoritoPelicula> consultarMisFavoritosPelicula(int id_u) {
		DBGestor DBGestor = new DBGestor();
		return DBGestor.consultarMisFavoritoPeliculas(id_u);
	}

	public Map<String, FavoritoPelicula> consultarFavoritosPelicula() {
		DBGestor DBGestor = new DBGestor();
		return DBGestor.consultarFavoritoPeliculas();
	}

	public Map<String, FavoritoCD> consultarFavoritosCDs() {
		DBGestor DBGestor = new DBGestor();
		return DBGestor.consultarFavoritoCDs();
	}

	public void anadirAlquilerPelicula(Integer prodId, Integer userID,
			String estado) {

		int id = getMaxIDAlquilerPeliculas() + 1;
		DBGestor DBGestor = new DBGestor();
		AlquilerPeliculas Alquiler = new AlquilerPeliculas(id, prodId, userID,
				estado);
		DBGestor.anadirAlquilerPelicula(Alquiler);

	}

	public void anadirAlquilerCD(Integer prodId, Integer userID, String estado) {

		int id = getMaxIDAlquilerCDs() + 1;
		DBGestor DBGestor = new DBGestor();
		AlquilerCDs Alquiler = new AlquilerCDs(id, prodId, userID, estado);
		DBGestor.anadirAlquilerCD(Alquiler);

	}

	public void anadirFavoritoPelicula(Integer prodId, Integer userID) {

		int id = getMaxIDFavoritoPeliculas() + 1;
		DBGestor DBGestor = new DBGestor();
		FavoritoPelicula Favorito = new FavoritoPelicula(prodId, userID, id);
		DBGestor.anadirFavoritoPelicula(Favorito);

	}

	public void anadirFavoritoCD(Integer prodId, Integer userID) {

		int id = getMaxIDFavoritoCDs() + 1;
		DBGestor DBGestor = new DBGestor();
		FavoritoCD Favorito = new FavoritoCD(prodId, userID, id);
		DBGestor.anadirFavoritoCD(Favorito);

	}

	public int getMaxIDAlquilerPeliculas() {

		int maxID = -1;
		GestorUsuario gestorUsuario = new GestorUsuario();
		alquileresPeliculas = (HashMap<String, AlquilerPeliculas>) gestorUsuario
				.consultarAlquileresPelicula();
		if (alquileresPeliculas != null) {
			ArrayList<AlquilerPeliculas> listaAlquileres = new ArrayList<AlquilerPeliculas>(
					alquileresPeliculas.values());
			for (int i = 0; i < listaAlquileres.size(); i++) {
				if (listaAlquileres.get(i).getId_alquiler() > maxID) {
					maxID = listaAlquileres.get(i).getId_alquiler();
				}
			}
		}
		return maxID;
	}

	private int getMaxIDAlquilerCDs() {

		int maxID = -1;
		GestorUsuario gestorUsuario = new GestorUsuario();
		alquileresCDs = (HashMap<String, AlquilerCDs>) gestorUsuario
				.consultarAlquileresCDs();
		if (alquileresCDs != null) {
			ArrayList<AlquilerCDs> listaAlquileres = new ArrayList<AlquilerCDs>(
					alquileresCDs.values());
			for (int i = 0; i < listaAlquileres.size(); i++) {
				if (listaAlquileres.get(i).getId_alquiler() > maxID) {
					maxID = listaAlquileres.get(i).getId_alquiler();
				}
			}
		}
		return maxID;
	}

	private int getMaxIDFavoritoPeliculas() {

		int maxID = -1;
		GestorUsuario gestorUsuario = new GestorUsuario();
		favoritosPeliculas = gestorUsuario.consultarFavoritosPelicula();
		if (favoritosPeliculas != null) {
			ArrayList<FavoritoPelicula> listaFavoritos = new ArrayList<FavoritoPelicula>(
					((Map<String, FavoritoPelicula>) favoritosPeliculas)
							.values());
			for (int i = 0; i < listaFavoritos.size(); i++) {
				if (listaFavoritos.get(i).getId_favorito() > maxID) {
					maxID = listaFavoritos.get(i).getId_favorito();
				}
			}
		}
		return maxID;
	}

	private int getMaxIDFavoritoCDs() {

		int maxID = -1;
		GestorUsuario gestorUsuario = new GestorUsuario();

		if (favoritosPeliculas != null) {
			ArrayList<FavoritoPelicula> listaFavoritos = new ArrayList<FavoritoPelicula>(
					((Map<String, FavoritoPelicula>) favoritosPeliculas)
							.values());
			for (int i = 0; i < listaFavoritos.size(); i++) {
				if (listaFavoritos.get(i).getId_favorito() > maxID) {
					maxID = listaFavoritos.get(i).getId_favorito();
				}
			}
		}
		return maxID;
	}

	public void eliminarUsuario() {
		DBGestor DBGestor = new DBGestor();
		DBGestor.eliminarUsuario();
		DBGestor = null;

	}

}